package com.zyg.canal.listener;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.xpand.starter.canal.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;

/**
 * ------------------------------
 * 作者: LMY
 * 类-功能: XX
 * 创建时间: 2021-11-10 11:36
 * ------------------------------
 **/
@CanalEventListener
public class CanalListener {

    @Autowired
    private StringRedisTemplate redisTemplate;
    /**
     * 功能: 监听插入事件
     * 参数:
     * 返回值: void
     * 时间: 2021/8/10 13:07
     */
     @InsertListenPoint
     public void onEventInsert(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
         System.out.println("onEventInsert");
         System.out.println("------------------------------------------------------------------------------------");
         rowData.getAfterColumnsList().stream().forEach(c-> System.out.println(c.getName() + "->" + c.getValue()));
     }
    /**
     * 功能: 监听修改事件
     * 参数:
     * 返回值: void
     * 时间: 2021/8/10 13:07
     */
     @UpdateListenPoint
     public void onEventUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
         System.out.println("onEventUpdate");
         System.out.println("------------------------------------------------------------------------------------");
         rowData.getAfterColumnsList().stream().forEach(c-> System.out.println(c.getName() + "->" + c.getValue()));
     }
    /**
     * 功能: 监听删除事件
     * 参数:
     * 返回值: void
     * 时间: 2021/8/10 13:07
     */
     @DeleteListenPoint
     public void onEventDelete(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
         System.out.println("onEventDelete");
         System.out.println("------------------------------------------------------------------------------------");
         rowData.getBeforeColumnsList().stream().forEach(c-> System.out.println( c.getName() + "->" + c.getValue()));
     }

    /**
     * 功能: 自定义监听(测试)
     * 参数:
     * 返回值: void
     * 时间: 2021/8/10 13:06
     */
    @ListenPoint(destination = "example",schema = "zyg_manager",table = {"tb_content"},
            eventType = {
                    CanalEntry.EventType.UPDATE,
                    CanalEntry.EventType.INSERT,
                    CanalEntry.EventType.DELETE}
    )
    public void onEventCustomUpdate(CanalEntry.EventType eventType, CanalEntry.RowData rowData) {
        //1. 根据事件得到不同的数据
        //1.1 得到添加或修改事件时的数据列表
        //List<CanalEntry.Column> columnsListAddOrUpdate = rowData.getAfterColumnsList();
        //1.2 得到删除时的数据列表
        //List<CanalEntry.Column> columnsListDelete = rowData.getBeforeColumnsList();
        System.out.println("正在同步广告列表...");
        //直接删除redis中的数据
        redisTemplate.delete("contentList");
    }
}
